本文档定义 EOELAB 互联云是什么、由哪些实体组成、必须满足哪些约束与规范。
EOELAB 互联云是一个本地域优先的联邦计算系统,其核心观点是:
联邦系统基于以下默认假设构建:
我们是一个面向联邦基础设施与自治系统的技术社区。
我们鼓励:
我们不接受:
本地域由唯一 Incus 控制面、调度域、故障域和维护责任域定义,不由物理子网定义,并能独立对外提供服务。
本地域可以架构为:
注:双节点只能作为两个独立的单节点管理,不得建立集群。
coreNumber命名)是由 admin 团队长期维护、持续提供公共服务能力的本地域,这是为了保证 EOELAB 社区与联邦生态具备长期持续运行能力| 类型 | 技术 | 定位 | 说明 |
|---|---|---|---|
| 虚拟化 | KVM(VM) | 需要内核特权时的特殊运行时 | 有性能损失与额外负担,启动较慢 |
| 系统层容器 | LXC | 标准运行时 | 仅支持 Linux,禁止特权容器 |
| 应用层容器 | OCI | 服务运行时 | 常规 OCI 容器 |
| 配置项 | 要求 |
|---|---|
| 主机名 | Incus 节点使用 DomainPrefix-Number,DomainPrefix 为联邦内唯一的本地域标识,Number 从 1 开始;例如 core0-1 |
| 节点寻址 | 统一使用 HOSTNAME.eoelab |
| 根文件系统 | Btrfs,使用 raid1/10 作为数据冗余策略 |
| 登录方式 | 仅支持 SSH 密钥登录,禁止使用密码验证 |
| 操作系统 | Debian stable + Incus stable(https://github.com/zabbly/incus) |
| 时间同步 | Debian stable 默认通过 systemd-timesyncd 维持 UTC 同步,无需额外配置 NTP |
| swap | 禁用 swap,以保证性能可预期/避免挤兑存储系统 |
特指在 LXC 运行时里嵌套运行 OCI 容器。由于 lxcfs 仅为 LXC 模拟了 procfs 和 sysfs,但嵌套容器会绕过 lxcfs 直接读取宿主机内存容量。由于 Incus 已支持 OCI 调度,默认不允许嵌套;CI/CD 中使用 Kaniko 构建镜像为例外。
接口是最终暴露在计算设施中的数据入口,由存储服务接口与存储介质评级拼接。计算设施只消费块设备和文件系统接口:
| 字段 | 含义 | 取值 |
|---|---|---|
| 接口类型 | 数据入口语义 | bs:块设备;fs:文件系统 |
| 介质 | 磁盘协议 | h:SAS/SATA HDD;s:SAS/SATA SSD;n:NVMe SSD |
| 容量 | 容量等级 | s:≤1T;m:1–4T;l:4–12T;e:>12T |
| 性能 | 性能等级 | h:更好;m:居中;l:最差(初始设备一般分配 l) |
| 拼接格式 | <接口类型>_<介质><容量><性能> | 例:fs_nml = 文件系统 / NVMe / 1–4T / 性能 l |
注意:集群必须保证各节点数据接口一致,保证集群可以重平衡实例,但本地存储不支持集群自愈合。
| 类型 | 访问特征 | 典型场景 | I/O 模式 |
|---|---|---|---|
| 热数据 | 高频访问,延迟敏感,吞吐量要求高 | 数据库、缓存、实时计算、在线服务 | 随机读写多,写密集 |
| 温数据 | 中等频率访问,延迟可容忍数十ms | 共享文件、CI/CD 产物、容器镜像、日志存储 | 顺序读写多,写较少 |
| 冷数据 | 低频访问,延迟不敏感,保留成本优先 | 备份、归档、合规保留、快照 | 极少读,几乎不写 |
| 策略 | 容错能力 | 驱动支持 | 容量 | 适用场景 | 主要缺点 |
|---|---|---|---|---|---|
| 多副本 | 允许 N-1 丢失 | Btrfs/TrueNAS/Ceph | 1/N | 热数据、延迟敏感、故障恢复要求快 | 存储利用率低 |
| RAID-Z | 允许 Z1/Z2 分别 1/2 盘丢失 | TrueNAS | Z1: N-1/N;Z2: N-2/N | 温/冷数据、大容量、写入频率低 | 写入性能差、重建慢且风险高 |
| 纠删码(EC) | 允许任意 M 块丢失 | Ceph | K/K+M | 大规模/大容量、读取多 | 写入有编码开销、小文件放大 |
| 底座 | 接口 | 适用规模 | 说明 |
|---|---|---|---|
| Btrfs | fs | 本地存储 | 节点本地提供 |
| TrueNAS | bs | 单机/小/中规模(3–6 节点) | 命名为 DomainPrefix-nas;不支持双机 |
| Ceph | bs/fs | 大/超大规模(≥7 节点) | 独立节点命名为 DomainPrefix-ceph-Number;EC 4+2 起步 |
Ceph 架设方式:
Ceph 节点和客户端统一使用 .eoelab 节点名称通信。
EOELAB 只定义两层网络能力:
底层网络只需为 Tailscale 提供 IP 连通性,不作为本地域的独立架构设施。节点不需要为集群通信配置静态局域网地址、局域网 DNS 或 hosts 映射。
.eoelab 访问,应用协议默认不配置 TLS,不单独维护服务端证书或客户端 TLS.eoelab HTTP 地址INTERFACE-Domain172.16.0.0/12eth0;VM 在需要 proxy 设备时可设置静态地址ACL 用于约束虚拟网络行为。
最终策略包含多个ACL规则的组合: * 例如只希望访问互联网:放行所有出入站流量,丢弃私网出入站流量(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16),使实例只能访问互联网而不能互相访问/连接。
为了克服本地域权限模型重复、无公网设备互联难度大等问题,通过联邦控制设施构建联邦计算系统。
联邦设施包括:
联邦设施
├── 联邦控制设施
│ ├── 数据库
│ ├── 认证设施
│ ├── 授权设施
│ └── 网络设施
├── 原生设施
│ ├── 对象存储服务
│ ├── 自托管Runner
│ └── 监控设施
└── 集成设施
├── 镜像仓库
├── 协作设施
└── 公告设施
联邦控制设施作为持续在线的控制面运行,公网入口由 Cloudflare Tunnel 提供,状态数据保留为可重建备份。
仅用于支持联邦设施,不对业务开放。
通过统一的认证设施避免重复认证/自托管密钥库。
展示名称 | 首选登录名 | 电子邮件,建议将展示名称实名,而首选登录名设置为常用的nickname,电子邮件不作处理EOELAB 认证策略采用“平台原生凭证优先,外部 IDP 增强为辅”的并行模型:
Zitadel 账户直接提供成员身份。应用需要区分资源或管理能力时使用自身授权机制,具体边界统一参见《EOELAB 权限模型》。
Zitadel 仅支持 RBAC 权限模型,额外基于 OpenFGA 提供 ReBAC 权限模型。
| 组件 | 框架 | 说明 |
|---|---|---|
| 授权服务 | OpenFGA | 各域独立实例 |
| 控制面 | fgaplane | 模型读写、Tuple 增删、授权诊断 |
具体地址统一参见《EOELAB 服务端点》。
.eoelab 是联邦网络内部域名,根据节点主机名自动生成记录| 组件 | 框架 | 说明 |
|---|---|---|
| 控制节点 | Headscale | 禁用内置 DERP 服务器 |
| WebUI | Headplane | 节点、用户和网络策略管理 |
| 中继服务 | DERP | 供应商与社区节点 |
| 公网入口 | Cloudflare Tunnel | 为批准的公网服务管理 DNS 路由和边缘 TLS,不属于联邦网络数据平面 |
具体地址统一参见《EOELAB 服务端点》。
tag 策略:[size, arch, runtime]
| size | 内存 |
|---|---|
| tiny | 2–4G |
| small | 4–8G |
| medium | 8–16G |
| arch | runtime |
|---|---|
| amd64 | lxc:轻量运行时,非特权,部分操作受限 |
| riscv64 | vm:标准运行时,拥有特权内核 |
节点预装 git。优先考虑非特权方案:OCI 容器打包使用 kaniko,OCI 镜像操作使用 crane,拒绝 dind 和 docker 操作 registry。
tag 策略:[purpose],用于特定用途而非通用构建。例如 mirror:位于海外,负责镜像中国大陆无法访问的 OCI 镜像/软件包。
| 规格 | 数量 |
|---|---|
| medium amd64 vm | 1 |
| mirror | 1 |
monitor监控设施采用存算分离架构,本地保留 WAL、短期数据和缓存,历史指标和日志存入 oss。
| 用途 | 框架 | 说明 |
|---|---|---|
| 全联邦指标采集 | Prometheus | 在 monitor 采集联邦节点和服务指标、短期存储并执行告警规则 |
| 指标长期存储与联邦查询 | Thanos | 将不可变指标块存入 RustFS,并提供跨地域查询 |
| 可视化 | Grafana | 状态存入联邦 PostgreSQL,仪表盘和数据源优先配置化管理 |
| 日志 | Loki | 使用 TSDB Single Store,将日志块和索引存入 RustFS |
| 历史指标告警 | Thanos Ruler | 评估依赖历史指标的规则 |
| 告警通知 | Alertmanager | 使用本地快照和 Gossip 保持通知与静默状态 |
使用官方仓库(images.linuxcontainers.org)。不在该仓库内的 OS 视同放弃。
Docker Hub 镜像通过《EOELAB 服务端点》列出的镜像入口拉取。该入口受 Docker Hub 和 Cloudflare Worker 拉取额度限制,必须使用 Docker Hub 账户登录,不提供匿名拉取。
使用阿里云容器镜像仓库(crpi-0fzeutaz68uv7lwt.cn-hangzhou.personal.cr.aliyuncs.com/NAMESPACE/REPO):
eoelab:自主构建的镜像,包括 cenv(EOELAB 标准运行时)upstream:同步的上游镜像OCI 仓库不公开密钥,所有操作通过 Codeberg 仓库的 Actions 完成。
EOELAB 使用 QQ 即时通信群组用于联邦协作:协调运维、通知故障/安全事件、日常交流。暂不考虑自建 Matrix。
域名:www.eoelab.org
由 Codeberg Actions 基于 Zine 框架自动构建,并作为静态资产发布至 Cloudflare Workers,用于发布社区公共通知、联邦规范与文档、服务端点/状态变更、基础设施/维护/安全事件公告。
我们暂不考虑自建邮件服务器或强行聚合为 NAME@eoelab.org。